Landscape ecologists have long understood that ecological processes can being influenced by landscape pattern. The prevailing paradigm for capturing and analyzing spatial patterns of landscape features has been the patch-mosaic model (PMM). This model is based largely on a categorical representation of spatial heterogeneity. The patch-mosaic model is well suited for landscapes with distinct edges, such as those that have experienced anthropogenic disturbance (e.g., clear cuts, agricultural, etc.). However, the PMM is less effective in landscapes characterized by continuous spatial heterogeneity (McGarigal and Cushman 2005). In the PMM approach, once a patch is defined (i.e., categorized), the heterogeneity within the patch is lost. Many ecological features vary continuously, as gradients across space. And increasingly we’re able to create continuous representations of landscape features using remote sensing techniques (e.g., percent land cover). In recent years, there has been some slow progress toward developing models of landscape structure based on continuous rather than categorical data (McGarigal and Cushman 2005; McGarigal et al. 2009). Much of the advancement in this domain has centered around quantifying surface complexity using tools developed in the field of surface metrology, a field that spun out of physics and mechanical engineering. The ecologist or biologist may recognize some of these tools as they’ve been used to derived variables that represent topographic variability (e.g., topographic roughness) from digital elevation models. Recently, more work has been done to understand how these tools may be applied to continuous representations of landscape heterogeneity (McGarigal et al. 2009) and specifically how they compare to the more familiar metrics based on the patch-mosaic model (Frazier 2016, Kedron et al. 2018). In this “gradient surface” paradigm, ecological attributes are conceptualized as 3D surfaces.
My goal here was to review some of the most recent literature in gradient surface modeling in landscape ecology to understand what variables are emerging as useful, and to calculate and visualize these metrics in a way that helps to understand if they may be meaningful for our analyses. Of particular interest were variables that capture some aspect of landscape edges, as well as patch connectivity or isolation. I initially selected variables based on these interests and on the findings by McGarigal et al. (2009) and Kedron et al. (2018) on how surface metrics relate to the more familiar patch-based metrics. I narrowed the list to two variables of possible relevance, which I present here. Other metrics could certainly be relevant, but were excluded for various reasons. The two metrics presented here were among the easier to comprehend. For example, the “core fluid retention index” was very similar to one of the chosen variables in terms of how it relates to patch-based metrics, but was a heavier lift in terms of comprehension, so “surface skewness” was used instead.
#Load libraries
library(raster)
library(rgdal)
library(rasterVis)
library(geodiv)
library(rgeos)
library(rgl)
Let’s load the % live forest data, reproject it to an equal area projection, crop it to reduce the amount of data we’re working with, and visualize it.
#Set working directory
setwd("C:/Users/ericm/Documents/ProjectRequests/FisherHabitatSelection_3rdOrder/SurfaceMetricsAnalysis")
#Load 2018 % Live Forest Cover Raster Data
fcov <- raster("RasterData/LiveForestFractionalCover.tif")
#Reproject to equal area projection (a requirement of the metric calculation function)
ref <- "+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs "
fcov <- projectRaster(fcov, res = 30, crs = ref, method = "bilinear")
#Load extent shapefile to crop layer. Just to reduce the area we're working with.
ext <- readOGR("TestExtent/TestExtent.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\ericm\Documents\ProjectRequests\FisherHabitatSelection_3rdOrder\SurfaceMetricsAnalysis\TestExtent\TestExtent.shp", layer: "TestExtent"
## with 1 features
## It has 1 fields
## Integer64 fields read as strings: id
ext <- spTransform(ext, ref)
#crop the raster
fcov <- crop(fcov, ext)
#visualize
forestCols <- colorRampPalette(c('lightyellow1', 'darkgreen'))(100)
forestTheme <- rasterVis::rasterTheme(region = forestCols)
rasterVis::levelplot(fcov, margin = F, par.settings = forestTheme,
ylab = NULL, xlab = NULL,
main = '% Live Forest')
Because surface metrics use a 3-Dimensional model of the variable of interest (live forest in this case), visualizations will be in 3D to help us understand how the landscape is being captured.
Let’s make an interactive visualization of the entire area of interest in 3D. You should be able to click and hold down to manipulate the angle. You’ll notice the z axis (height) represents % forest cover, x and y are spatial coordinates. Red to Green represents low to high % forest cover values.
open3d()
## null
## 1
breaks <- c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
plot3D(fcov, lit = FALSE, specular = "black", shininess = 5, at = breaks,
col=colorRampPalette(brewer.pal(7, "RdYlGn")))
decorate3d(main = "%Live Forest", axes = T, box = T, xlab = "", ylab = "", zlab="")
#To make interactive plots in RMarkdown
rglwidget()